﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using MS.InformationManagement.Presenter.Support;
using MS.InformationManagement.Presenter.GestionDeUsuarios;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Taxonomy;
using MS.InformationManagement.Support;
using MS.InformationManagement.Support.Constants;
using MS.InformationManagement.DAL.DocumentCenter;
using System.Collections.Generic;
using System.Web;

namespace MS.InformationManagement.WP.DocumentCenter.GestionDeUsuarios
{
    public partial class GestionDeUsuariosUserControl : BaseControl, IGestionDeUsuariosView
    {
        #region fields

        private GestionDeUsuariosPresenter _presenter;
        

        #endregion

        #region Properties

        public SPUser SelectedUser { get; set; }
        public int CurrentId
        {
            get
            {
                if (string.IsNullOrEmpty(Page.Request.QueryString["UserID"]))
                    return 0;
                else
                    return int.Parse(Page.Request.QueryString["UserID"]);
            }
        }
        public string CedulaUsuario { get; set; }
        public string NombreUsuario { get; set; }
        public string ApellidoUsuario { get; set; }
        public string TelefonoUsuario { get; set; }
        public string UbicacionUsuario { get; set; }
        public string EmailUsuario { get; set; }
        public string DepartamentoUsuario { get; set; }
        public List<VincularPerfiles> AllPerfiles { get; set; }
        public bool SucceedUpdate { get; set; }
        public TaxonomyFieldValue TaxonomyFieldValueDepartamento { get; set; }
        public string UserPerfil { get; set; }
        public bool HaveLibrary { get; set; }
        string MessageLibraryNotFound = "El usuario no cuenta con una biblioteca en el sistema.<br>La biblioteca se creara automáticamente al actualizar su información.";
        public List<ListItem> ListRoleByPerfil { get; set; }

        #endregion

        #region Form Events

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            lblInfo.Text = string.Empty;
            txtCedula.Required(ExceptionConstants.ERROR_CAMPO_NULO,"ValBtnUpdate", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            //txtEmail.Required(ExceptionConstants.ERROR_CAMPO_NULO, "ValBtnUpdate", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            //txtEmail.RegularExpression(@"^([\w-]+\.)*?[\w-]+@[\w-]+\.([\w-]+\.)*?[\w]+$", ExceptionConstants.ERROR_INVALID_EMAIL, "ValBtnUpdate", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            //txtApellidos.Required(ExceptionConstants.ERROR_CAMPO_NULO, "ValBtnUpdate", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            //txtNombres.Required(ExceptionConstants.ERROR_CAMPO_NULO, "ValBtnUpdate", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtUbicacion.Required(ExceptionConstants.ERROR_CAMPO_NULO, "ValBtnUpdate", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            txtTelefono.Required(ExceptionConstants.ERROR_CAMPO_NULO, "ValBtnUpdate", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);            
            ddlPerfiles.Required(ExceptionConstants.ERROR_DDL_OBLIGATORIO, "ValBtnUpdate", AjaxControlToolkit.ValidatorCalloutPosition.BottomRight);
            ddlDeptos.Required(true);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            _presenter = new GestionDeUsuariosPresenter(this);
            
            if (CurrentId != 0)
            {
                pnlInfo.Visible = true;
                SelectedUser = MS.InformationManagement.Support.PeopleHelper.GetUserById(CurrentId);
                _presenter.HandleLoad();
            }
        }

        protected void Action_Update(object sender, EventArgs e)
        {
            try
            {
                lblInfo.Text = string.Empty;
                pnlInfo.Visible = true;
                CedulaUsuario = txtCedula.Text;
                NombreUsuario = txtNombres.Text;
                ApellidoUsuario = txtApellidos.Text;
                TelefonoUsuario = txtTelefono.Text;
                UbicacionUsuario = txtUbicacion.Text;
                EmailUsuario = txtEmail.Text;
                DepartamentoUsuario = ddlDeptos.TaxonomySelectedValue.Label.ToString();
                UserPerfil = ddlPerfiles.SelectedItem.Text;
                _presenter.HandleUpdate();
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }

        protected void Action_Editar(object sender, EventArgs e)
        {
            try
            {
                btnUpdate.Visible = true;
                btnCancelar.Visible = true;
                btnEditar.Visible = false;
                ShowForEdit(true);
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }

        protected void Action_Cancelar(object sender, EventArgs e)
        {
            try
            {
                txtCedula.Text = CedulaUsuario;
                txtTelefono.Text = TelefonoUsuario;
                txtUbicacion.Text = UbicacionUsuario;
                if (TaxonomyFieldValueDepartamento != null) { ddlDeptos.SeletedTerm = TaxonomyFieldValueDepartamento.Label.ToString(); }
                ddlPerfiles.SelectedValue = UserPerfil;
                rptRoles.DataSource = ListRoleByPerfil;
                rptRoles.DataBind();

                btnUpdate.Visible = false;
                btnCancelar.Visible = false;
                btnEditar.Visible = true;
                ShowForEdit(false);
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }

        protected void ddlPerfilUsuario(object sender, EventArgs e)
        {
            UserPerfil = ddlPerfiles.SelectedItem.Text;
            _presenter.RequestRoles();
        }

        protected void btnClose_Click(object sender, EventArgs e)
        {
            this.CloseWindow();
        }

        private void ShowForEdit(bool estado)
        {
            txtCedula.Enabled = estado;
            ddlDeptos.ReadOnly = estado;
            txtTelefono.Enabled = estado;
            ddlPerfiles.Enabled = estado;
            txtObservaciones.Enabled = estado;
            txtUbicacion.Enabled = estado;
        }

        #endregion

        #region Implemented Methods

        public void Show()
        {
            try 
            {
                if (!Page.IsPostBack)
                {
                    txtCedula.Text = CedulaUsuario;
                    txtNombres.Text = NombreUsuario;
                    txtApellidos.Text = ApellidoUsuario;
                    txtTelefono.Text = TelefonoUsuario;
                    txtUbicacion.Text = UbicacionUsuario;
                    txtEmail.Text = EmailUsuario;
                    if (TaxonomyFieldValueDepartamento != null) {ddlDeptos.SeletedTerm = TaxonomyFieldValueDepartamento.Label.ToString();}

                    ddlPerfiles.DataSource = AllPerfiles;
                    ddlPerfiles.DataBind();

                    ddlPerfiles.SelectedValue = UserPerfil;

                    rptRoles.DataSource = ListRoleByPerfil;
                    rptRoles.DataBind();
                }
                if (HaveLibrary == false)
                {
                    lblInfo.Text = MessageLibraryNotFound;
                }
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
            
        }

        public void Result()
        {
            try
            {
                if (SucceedUpdate == true)
                {
                    this.HandleSuccess(GlobalConstants.SUCCESS_USER_UPDATE, null);
                    //HttpContext.Current.Response.Write("<script type='text/javascript'>alert('" + GlobalConstants.SUCCESS_USER_UPDATE + "');</script>");
                    ShowForEdit(false);
                    btnUpdate.Visible = false;
                    btnCancelar.Visible = false;
                    btnEditar.Visible = true;
                }
                else
                {
                    this.HandleWarning("Ha ocurrido un error al actualizar la información");
                    //HttpContext.Current.Response.Write("<script type='text/javascript'>alert('Ha ocurrido un error al actualizar la información');</script>");
                    ShowForEdit(false);
                    btnUpdate.Visible = false;
                    btnCancelar.Visible = false;
                    btnEditar.Visible = true;
                }
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }

        }

        public void UpdateRoles()
        {
            try
            {
                rptRoles.DataSource = ListRoleByPerfil;
                rptRoles.DataBind();
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }

        }

        #endregion

   

        

        


    }
}
